/***************************************************************
 *  Copyright (c) 2007 by GroupMe! Team (www.groupme.net)
 *  All rights reserved
 *
 *  This file is part of the GroupMe! Project. You can utilize
 *  software of the GroupMe! project under the terms of the 
 *  GNU Lesser General Public License as published by the
 *  Free Software Foundation in version 2.1.
 * 
 *  The GNU Lesser General Public License can be found at:
 *  http://www.gnu.org/licenses/lgpl.html
 *
 *  This copyright notice MUST APPEAR in all copies of the file!
 ***************************************************************/
package net.groupme.model;

import java.net.URI;
import java.net.URISyntaxException;

import net.groupme.exceptions.UpdateFailedException;

/**
 * Every object within the GroupMe! Application is identifiable via an URI.
 * Further, each object provides a name/label and a description.
 * 
 * @author Fabian Abel, <a href="mailto:abel@l3s.de">abel@l3s.de</a>
 * 
 * @version 1.0, created on 20/04/2007
 * 
 */
public interface Identifiable {

	/**
	 * This method returns the description of an object.
	 * 
	 * @return the description of an object (corresponds to the rdfs:description
	 *         of the RDF resource)
	 */
	public String getDescription();

	/**
	 * This method returns the label of an object.
	 * 
	 * @return the label of an object (corresponds to the rdfs:label of the RDF
	 *         resource)
	 */
	public String getLabel();

	/**
	 * This method returns the URI of an object.
	 * 
	 * @return the URI of an object (corresponds to the URI of the RDF resource)
	 * @throws URISyntaxException
	 */
	public URI getURI();

	/**
	 * This method sets the description of an object.
	 * 
	 * @param description
	 *            the description of an object (corresponds to the
	 *            rdfs:description of the RDF resource)
	 * @throws UpdateFailedException
	 */
	public void setDescription(String description) throws UpdateFailedException;

	/**
	 * This method sets the label of an object.
	 * 
	 * @param label
	 *            the label of an object (corresponds to the rdfs:label of the
	 *            RDF resource)
	 */
	public void setLabel(String label);

	/** 
	 * This method returns the ID  of the identifiable object as defined in the database of GroupMe!
	 * @return  the ID  of the identifiable object as defined in the database of GroupMe!
	 */
	public String getId();
}
